require 'rexml/document'
include REXML

class Personale::AssenzePersonaleController < DefaultController
  require_role self.parent_name.underscore
  active_scaffold :assenza_personale do | config|
    config.label = Application.controller_label(self)
    list.sorting = {:data_inizio => 'DESC'}
    config.actions.add :field_search, :config_list, :export
    
    columns_list = [ :personale, :tipo_assenza, :data_inizio, :data_fine, :descrizione ]
    columns = columns_list + [:testo_certificato]
    config.columns = columns
    config.config_list.default_columns = columns_list
    config.create.columns = columns_list
    
    [:personale, :tipo_assenza].each { |i| config.columns[i].form_ui = :select }
    config.columns[:tipo_assenza].search_ui = :multi_select
    [:data_inizio, :data_inizio].each { |i|
      config.columns[i].form_ui = :calendar_date_select
      config.columns[i].options = {:year_range => [1.years.ago, 1.years.from_now]}
    }
    columns.each { |i| config.columns[i].inplace_edit = :ajax }
    config.columns[:descrizione].options = NOTE_TEXTAREA
    
    config.action_links.add :upload_certificato, :label => "Certificato", :type => :collection, :inline => true
    config.columns[:personale].set_link('show', :controller => 'anagrafiche/personale')
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member
  end

  def scheduler
    render :action => 'scheduler', :layout => 'default'
  end

  def upload_certificato
    render(:partial => 'upload_certificato')
  end

  def do_testo_certificato(dati)
    testo = "Datore di lavoro: matricola INPS: #{dati['attestato']['matricolaINPS']}"
    #testo += "Lavoratore: #{dati['lavoratore']['cognome']} #{dati['lavoratore']['nome']} Nato/a a: #{dati['lavoratore']['cognome']} ALESSANDRIA Prov. AL  il 01/09/1964"
    #testo += "C.F.: RMNRLL64P41A182H N. Certificato: 16195084"
    #testo += "Fine malattia: 03/10/2011 Inizio malattia 29/09/2011 Rilascio 03/10/2011"
    #testo += "Tipo certificato C"
    #testo += "Residenza o domicilio abituale:"
    #testo += "Via/P.zza VIA CAVOUR 23 C.A.P. 15121 Comune ALESSANDRIA Prov. AL"
    #testo += "Indirizzo di reperibilità: Presso "
    #testo += "Via/P.zza  C.A.P.       Comune      Prov.   "
    #testo += "Medico: BELLISOMI ALESSANDRA MARIA CRI  ASL 010 213"
    #testo += "--------------------------------------------------------------------"

    return testo
  end

  def do_upload
    uploaded_file = params[:xml_file]
    if uploaded_file.respond_to? :read
      data = uploaded_file.read
      doc = REXML::Document.new(data)
    end
    @dati = Hash.new
    ['attestato', 'medico', 'lavoratore', 'residenza'].each { |i|
      map = Hash.new
      REXML::XPath.each(doc,'//' << i) do |section|
        section.each_element do |setting|
          setting.attributes.each {  |name,value|   map[setting.name+'__'+name]=value }
          map[setting.name] = setting.text
        end
      end
      @dati[i] = map
    }
    assenza = AssenzaPersonale.new(
      :data_inizio => @dati['attestato']['dataInizio'],
      :data_fine => @dati['attestato']['dataFine'],
      :tipo_assenza_id => 2,
      :personale_id => Personale.first(:conditions => {:codice_fiscale => @dati['lavoratore']['codiceFiscale']}).id,
      :testo_certificato => do_testo_certificato(@dati)
    )
    assenza.save
    Allegato.new(:name => "certificato", :file_allegato => params[:xml_file],
                :allegato_ref_id => assenza.id,
                :allegato_ref_type => "AssenzaPersonale").save

    redirect_to :action => :index and return
  end

end
